﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;

namespace Golfvision2020
{
    public partial class Spelare : Form
    {

        // Vi tar in förälder-formen så att vi kan komma åt databaskopplingen
        public Golfvision Klubben;

        public Spelare(Golfvision golfklubben)
        {
            Klubben = golfklubben;
            InitializeComponent(); 

            GetMedlemmarFromDB(); //Hämtar upp och lägger in alla spelare i listboxen

            KollaBehörighet(); //Kontrollerar behörighet för att få använda formuläret
        }

        private void KollaBehörighet() //Kontrollerar vilken behörighet den inloggade personen har och ger behörighet till "rätt" sidor
        {
            if (Klubben.Admin == false)
            {
                TaBortSpelareButton.Enabled = false;
                RegSpelareButton.Enabled = false;
            }
        }

        // Hämtar alla spelare och lägg in i spelarlistan-listviewen
        public void GetMedlemmarFromDB()
        {
            Spelarlista.Items.Clear();
            // Hämtar inte ut spelare som har personnummer kortare än 5 siffror (admin, banpersonal och tävlingsledare)
            NpgsqlCommand command = new NpgsqlCommand("select golf_id, first_name, last_name, handicap from spelare WHERE personnummer > 9999 ORDER BY golf_id", Klubben.conn); //Ett commandobjekt skapas och knyts till ett sql-uttryck och en db-koppling
            NpgsqlDataReader dr = command.ExecuteReader();  //Kommandot körs och resultatet läggs i ett datareader-objekt
                                   
            while (dr.Read()) //En loop som rad för rad läser innehållet i datareader'n och lägger in de önskade värdena i listboxen
            {
                ListViewItem medlem = new ListViewItem(dr["golf_id"].ToString());
                medlem.SubItems.Add(dr["first_name"].ToString());
                medlem.SubItems.Add(dr["last_name"].ToString());
                medlem.SubItems.Add(dr["handicap"].ToString());
                Spelarlista.Items.Add(medlem);
            }
            dr.Close();
        }

        private void RegSpelareButton_Click(object sender, EventArgs e) //Ifall registrera spelare knappen tryck så öppnas ett nytt formulär för detta
        {
            // Avmarkera alla markerade i spelarlistan
            foreach (ListViewItem medlem in Spelarlista.SelectedItems)
            {
                medlem.Selected = false;
            }
            Spelarlista.SelectedIndices.Clear();

            RegistreraUppdatera Registreradialog = new RegistreraUppdatera(this);
            Registreradialog.getStatusFromDBNewPerson();
            Registreradialog.ShowDialog();
        }

        private void UpdatSpelareButton_Click(object sender, EventArgs e) //Ifall knapp "uppdatera spelare" trycks öppnas ett nytt formulär för detta
        {

            if (Spelarlista.SelectedItems.Count != 1)// En person i listboxen måste vara markerad för att kunna uppdateras
            {
                MessageBox.Show("En medlem måste vara markerad för att uppdatera.");
                return;
            }

            if (!Klubben.Admin && Spelarlista.SelectedItems[0].SubItems[0].Text != Klubben.Golf_id) //Kontrollerar vem som försöker uppdatera vad och ifall den har behörighet för detta
            {
                MessageBox.Show("Du får bara uppdatera dina egna uppgifter.");
                return;
            }
            
            RegistreraUppdatera Uppdateradialog = new RegistreraUppdatera(this);
            Uppdateradialog.RegistreraNyLabel.Text = "Uppdatera spelare";
            Uppdateradialog.ReggaSpelareButton.Text = "Uppdatera spelare";
            Uppdateradialog.ShowDialog();
        }

        private void TaBortSpelareButton_Click(object sender, EventArgs e)
        {
            if (Spelarlista.SelectedItems.Count < 1)
            {
                MessageBox.Show("Du måste markera en eller flera medlemmar i listan");
                return;
            }

            // Öppnar dialogruta med fråga, samt ja och nej-knapp
            DialogResult JaNej = MessageBox.Show("Är du säker på att du vill ta bort medlem/medlemmarna?", "", MessageBoxButtons.YesNo);

            if (JaNej == DialogResult.Yes)
            {
                // För varje markerad medlem i listan
                foreach (ListViewItem medlem in Spelarlista.SelectedItems)
                {
                    NpgsqlCommand command = new NpgsqlCommand("delete from Spelare where golf_id = '" + medlem.SubItems[0].Text + "'", Klubben.conn);
                    int antalposter = command.ExecuteNonQuery();
                    if (antalposter == 0)
                        MessageBox.Show("Spelare med id " + medlem.SubItems[0] + " kunde ej tas bort");
                }
                GetMedlemmarFromDB();
            }
        }
    }
}
